package com.epsilon.pos.productos.delegator;

import java.util.List;

import org.eclipse.swt.widgets.Shell;

import com.epsilon.commons.util.WidgetsUtil;
import com.epsilon.pos.impuestos.model.Impuesto;
import com.epsilon.pos.productos.events.ProductoEventDelegate;
import com.epsilon.pos.productos.modelo.ArticuloUnitario;
import com.epsilon.pos.productos.view.ProductoShell;
import com.epsilon.pos.proveedores.model.Proveedor;

public class ProductoControl {
	
	private ProductoEventDelegate productoEventDelegate;
	
	private ProductoControl ( ProductoEventDelegate productoEventDelegate ) {
		this.productoEventDelegate = productoEventDelegate;
	}
	
	public static ProductoControl getInstance( Shell parent ) {
		ProductoShell productoShell = new ProductoShell( parent );
		ProductoEventDelegate productoEventDelegate = new ProductoEventDelegate( productoShell );
		setEvents( productoShell, productoEventDelegate );
		
		return new ProductoControl( productoEventDelegate );
	}
	
	private static void setEvents( ProductoShell productoShell, ProductoEventDelegate events ) {
		// Configuramos y ponemos los viewers :D
		events.setVwTblImpuestos( WidgetsUtil.configureIMapeableTableViewer( productoShell.getProductoComposite().getTblImpuestos() ) );
		events.setVwTblProveedores( WidgetsUtil.configureIMapeableTableViewer( productoShell.getProductoComposite().getTblProveedores() ) );
		
		// Ponemos los eventos :D
		productoShell.getProductoComposite().getBtnAgregarImpuesto().addSelectionListener( events.getEventoBtnAgregarImpuesto() );
		productoShell.getProductoComposite().getBtnQuitarImpuesto().addSelectionListener( events.getEventoBtnQuitarImpuesto() );
		productoShell.getProductoComposite().getBtnVincularProveedor().addSelectionListener( events.getEventoBtnAgregarProveedor() );
		productoShell.getProductoComposite().getBtnDesvincularProveedor().addSelectionListener( events.getEventoBtnDesvincularProveedor() );
		productoShell.getProductoComposite().getTxtPrecioAlPublico().addVerifyListener( WidgetsUtil.getVerifyListenerCampoNumericoFlotante( 
				productoShell.getProductoComposite().getTxtPrecioAlPublico() ) );
		productoShell.getProductoComposite().getBtnAgregar().addSelectionListener( events.getEventoBtnAgregar() );
		productoShell.getProductoComposite().getChkMarca().addSelectionListener( events.getEventoChkMarca() );
	}
	
	public ProductoShell getProductoShell() {
		return productoEventDelegate.getProductoShell();
	}
	
	public List< Impuesto > getListaDeImpuestosEliminados() {
		return productoEventDelegate.getListaDeImpuestosEliminados();
	}
	
	public List< Proveedor > getListaDeProveedores() {
		return productoEventDelegate.getListaDeProveedores();
	}
	
	public ArticuloUnitario getArticuloUnitario() {
		return productoEventDelegate.getArticuloUnitario();
	}
	
	public void setArticuloUnitario( ArticuloUnitario articuloUnitario ) {
		productoEventDelegate.setArticuloUnitario( articuloUnitario );
	}
}